﻿using CREAPA.Dominio;
using CREAPA.Repositorio;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CREAPA.RepositorioADO
{
   public class PermissaoRepositorioADO
    {
        private Contexto contexto;

        private void Inserir(Permissao permissao)
        {
            var strQuery = "";
            strQuery += " INSERT INTO Permissoes (Descricao)";
            strQuery += string.Format(" values ('{0}')", permissao.Descricao);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }
        private void Alterar(Permissao permissao)
        {
            var strQuery = "";
            strQuery += "UPDATE Permissoes SET ";
            strQuery += string.Format(" Descricao='{0}' ", permissao.Descricao);
            strQuery += string.Format(" WHERE Id={0} ", permissao.Id);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }

        public void Salvar(Permissao permissao)
        {
            if (permissao.Id > 0)
            {
                Alterar(permissao);
            }
            else
            {
                Inserir(permissao);
            }
        }

        public void Excluir(int id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = string.Format(" DELETE FROM Permissoes WHERE Id = {0}", id);
                contexto.ExecutaComando(strQuery);
            }
        }

        public Permissao ListarPorId(int Id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" SELECT * FROM Permissoes WHERE Id = {0}", Id);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader).FirstOrDefault();
            }
        }

        public IEnumerable<Permissao> ListarPermissao()
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" Select * from Permissoes order by Descricao");
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        private List<Permissao> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var permissao = new List<Permissao>();
            while (reader.Read())
            {
                var TemObjeto = new Permissao()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Descricao = reader["Descricao"].ToString()
                };
                permissao.Add(TemObjeto);
            }
            reader.Close();
            return permissao;
        }
    }
}
